Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshService.kt e85300531e124df08788c1b765d50af1bf6d516d (e8530053) Text, 16.88 KB

T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.service

Tff7b72import T7ee787android.app.Service
Tff7b72import T7ee787android.content.Context
Tff7b72import T7ee787android.content.Intent
Tff7b72import T7ee787android.content.pm.ServiceInfo
Tff7b72import T7ee787android.os.Build
Tff7b72import T7ee787android.os.IBinder
Tff7b72import T7ee787androidx.core.app.ServiceCompat
Tff7b72import T7ee787co.touchlab.kermit.Logger
Tff7b72import T7ee787kotlinx.coroutines.CoroutineScope
Tff7b72import T7ee787kotlinx.coroutines.Dispatchers
Tff7b72import T7ee787kotlinx.coroutines.Job
Tff7b72import T7ee787org.koin.android.ext.android.inject
Tff7b72import T7ee787org.meshtastic.core.common.hasLocationPermission
Tff7b72import T7ee787org.meshtastic.core.common.util.toRemoteExceptions
Tff7b72import T7ee787org.meshtastic.core.model.DataPacket
Tff7b72import T7ee787org.meshtastic.core.model.DeviceVersion
Tff7b72import T7ee787org.meshtastic.core.model.MeshUser
Tff7b72import T7ee787org.meshtastic.core.model.MyNodeInfo
Tff7b72import T7ee787org.meshtastic.core.model.NodeInfo
Tff7b72import T7ee787org.meshtastic.core.model.Position
Tff7b72import T7ee787org.meshtastic.core.model.RadioNotConnectedException
Tff7b72import T7ee787org.meshtastic.core.model.util.anonymize
Tff7b72import T7ee787org.meshtastic.core.repository.CommandSender
Tff7b72import T7ee787org.meshtastic.core.repository.MeshConnectionManager
Tff7b72import T7ee787org.meshtastic.core.repository.MeshLocationManager
Tff7b72import T7ee787org.meshtastic.core.repository.MeshRouter
Tff7b72import T7ee787org.meshtastic.core.repository.MeshServiceNotifications
Tff7b72import T7ee787org.meshtastic.core.repository.NodeManager
Tff7b72import T7ee787org.meshtastic.core.repository.RadioInterfaceService
Tff7b72import T7ee787org.meshtastic.core.repository.SERVICE_NOTIFY_ID
Tff7b72import T7ee787org.meshtastic.core.repository.ServiceBroadcasts
Tff7b72import T7ee787org.meshtastic.core.repository.ServiceRepository
Tff7b72import T7ee787org.meshtastic.proto.PortNum

T8b949e/**
* Android foreground service that hosts the Meshtastic mesh radio connection.
*
* Acts as the lifecycle anchor for the [MeshServiceOrchestrator], which manages all manager initialization and
* connection state. Exposes an AIDL binder for external client integration via [core:api].
*/
T8b949e// IMeshService is deprecated but still required for AIDL binding
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffLargeClassTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffDEPRECATIONTa5d6ff"Tb4b4b4)
Tff7b72class T56d364MeshService Tb4b4b4: Te6edf3ServiceTb4b4b4(Tb4b4b4) Tb4b4b4{

Tff7b72private Tff7b72val Te6edf3radioInterfaceServiceTb4b4b4: Te6edf3RadioInterfaceService Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3serviceRepositoryTb4b4b4: Te6edf3ServiceRepository Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3serviceBroadcastsTb4b4b4: Te6edf3ServiceBroadcasts Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3nodeManagerTb4b4b4: Te6edf3NodeManager Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3commandSenderTb4b4b4: Te6edf3CommandSender Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3locationManagerTb4b4b4: Te6edf3MeshLocationManager Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3connectionManagerTb4b4b4: Te6edf3MeshConnectionManager Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3notificationsTb4b4b4: Te6edf3MeshServiceNotifications Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

T8b949e/** Android-typed accessor for the foreground service notification. */
Tff7b72private Tff7b72val Te6edf3androidNotificationsTb4b4b4: Te6edf3MeshServiceNotificationsImpl
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3notifications Tff7b72as Te6edf3MeshServiceNotificationsImpl

Tff7b72private Tff7b72val Te6edf3orchestratorTb4b4b4: Te6edf3MeshServiceOrchestrator Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3routerTb4b4b4: Te6edf3MeshRouter Tff7b72by Te6edf3injectTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3serviceJob Tff7b72= Te6edf3JobTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3serviceScope Tff7b72= Te6edf3CoroutineScopeTb4b4b4(Te6edf3DispatchersTb4b4b4.Te6edf3IO Tff7b72+ Te6edf3serviceJobTb4b4b4)

Tff7b72private Tff7b72var Te6edf3isServiceInitialized Tff7b72= Tff7b72false

Tff7b72private Tff7b72val Te6edf3myNodeNumTb4b4b4: Tffa657Int
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3nodeManagerTb4b4b4.Te6edf3myNodeNumTb4b4b4.Te6edf3value Tff7b72?: Tff7b72throw Te6edf3RadioNotConnectedExceptionTb4b4b4(Tb4b4b4)

Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72fun Td2a8ffactionReceivedTb4b4b4(Te6edf3portNumTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3portType Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3fromValueTb4b4b4(Te6edf3portNumTb4b4b4)
Tff7b72val Te6edf3portStr Tff7b72= Te6edf3portTypeTff7b72?.Te6edf3toStringTb4b4b4(Tb4b4b4) Tff7b72?: Te6edf3portNumTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3actionReceivedTb4b4b4(Te6edf3portStrTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffcreateIntentTb4b4b4(Te6edf3contextTb4b4b4: Te6edf3ContextTb4b4b4) Tff7b72= Te6edf3IntentTb4b4b4(Te6edf3contextTb4b4b4, Te6edf3MeshServiceTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)

Tff7b72fun Td2a8ffchangeDeviceAddressTb4b4b4(Te6edf3contextTb4b4b4: Te6edf3ContextTb4b4b4, Te6edf3serviceTb4b4b4: Te6edf3IMeshServiceTb4b4b4, Te6edf3addressTb4b4b4: Tffa657String?Tb4b4b4) Tb4b4b4{
Te6edf3serviceTb4b4b4.Te6edf3setDeviceAddressTb4b4b4(Te6edf3addressTb4b4b4)
Te6edf3startServiceTb4b4b4(Te6edf3contextTb4b4b4)
Tb4b4b4}

Tff7b72val Te6edf3minDeviceVersion Tff7b72= Te6edf3DeviceVersionTb4b4b4(Te6edf3DeviceVersionTb4b4b4.Te6edf3MIN_FW_VERSIONTb4b4b4)
Tff7b72val Te6edf3absoluteMinDeviceVersion Tff7b72= Te6edf3DeviceVersionTb4b4b4(Te6edf3DeviceVersionTb4b4b4.Te6edf3ABS_MIN_FW_VERSIONTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffonCreateTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onCreateTb4b4b4(Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3i Tb4b4b4{ Ta5d6ff"Ta5d6ffCreating mesh serviceTa5d6ff" Tb4b4b4}

Tff7b72try Tb4b4b4{
Te6edf3orchestratorTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)
Te6edf3isServiceInitialized Tff7b72= Tff7b72true
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3IllegalStateExceptionTb4b4b4) Tb4b4b4{
T8b949e// Koin throws IllegalStateException when the DI graph is not yet initialized.
T8b949e// This can happen if the system restarts the service (e.g. after a crash or on boot)
T8b949e// before Application.onCreate() has finished setting up Koin.
T8b949e// In release builds, R8 may merge Koin's InstanceCreationException with unrelated
T8b949e// exception classes (observed as io.ktor.http.URLDecodeException), so we cannot rely
T8b949e// on the exception type alone. We catch IllegalStateException narrowly around the
T8b949e// orchestrator/DI access — not around super.onCreate() — so framework exceptions
T8b949e// still propagate normally.
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffMeshService: DI not ready, stopping serviceTa5d6ff" Tb4b4b4}
Te6edf3stopSelfTb4b4b4(Tb4b4b4)
Tff7b72return
Tb4b4b4}
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffReturnCountTa5d6ff"Tb4b4b4)
Tff7b72override Tff7b72fun Td2a8ffonStartCommandTb4b4b4(Te6edf3intentTb4b4b4: Te6edf3Intent?Tb4b4b4, Te6edf3flagsTb4b4b4: Tffa657IntTb4b4b4, Te6edf3startIdTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657Int Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isServiceInitializedTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3w Tb4b4b4{ Ta5d6ff"Ta5d6ffonStartCommand called but service is not initialized (likely DI failure). Stopping.Ta5d6ff" Tb4b4b4}
Te6edf3stopSelfTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3START_NOT_STICKY
Tb4b4b4}

Tff7b72val Te6edf3a Tff7b72= Te6edf3radioInterfaceServiceTb4b4b4.Te6edf3getDeviceAddressTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3wantForeground Tff7b72= Te6edf3a Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3a Tff7b72!Tff7b72= Ta5d6ff"Ta5d6ffnTa5d6ff"

Te6edf3connectionManagerTb4b4b4.Te6edf3updateStatusNotificationTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3notification Tff7b72= Te6edf3androidNotificationsTb4b4b4.Te6edf3getServiceNotificationTb4b4b4(Tb4b4b4)

Tff7b72val Te6edf3foregroundServiceType Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3QTb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3types Tff7b72= Te6edf3ServiceInfoTb4b4b4.Te6edf3FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
Tff7b72if Tb4b4b4(Te6edf3hasLocationPermissionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3types Tff7b72= Te6edf3types Te6edf3or Te6edf3ServiceInfoTb4b4b4.Te6edf3FOREGROUND_SERVICE_TYPE_LOCATION
Tb4b4b4}
Te6edf3types
Tb4b4b4} Tff7b72else Tb4b4b4{
T79c0ff0
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooGenericExceptionCaughtTa5d6ff"Tb4b4b4)
Tff7b72try Tb4b4b4{
Te6edf3ServiceCompatTb4b4b4.Te6edf3startForegroundTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3SERVICE_NOTIFY_IDTb4b4b4, Te6edf3notificationTb4b4b4, Te6edf3foregroundServiceTypeTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3SecurityExceptionTb4b4b4) Tb4b4b4{
T8b949e// On Android 14+ starting a location FGS from the background can fail with SecurityException
T8b949e// if the app is not in an allowed state. Retry without the location type if that was requested.
Tff7b72val Te6edf3connectedDeviceOnly Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3QTb4b4b4) Tb4b4b4{
Te6edf3ServiceInfoTb4b4b4.Te6edf3FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
Tb4b4b4} Tff7b72else Tb4b4b4{
T79c0ff0
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3foregroundServiceType Tff7b72!Tff7b72= Te6edf3connectedDeviceOnlyTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3exTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffFailed to start foreground service with location type, retrying with connectedDevice onlyTa5d6ff"
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3ServiceCompatTb4b4b4.Te6edf3startForegroundTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3SERVICE_NOTIFY_IDTb4b4b4, Te6edf3notificationTb4b4b4, Te6edf3connectedDeviceOnlyTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3retryExTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3retryExTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to start foreground service even after retryTa5d6ff" Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3exTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffSecurityException starting foreground serviceTa5d6ff" Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3exTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3exTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffError starting foreground serviceTa5d6ff" Tb4b4b4}
Tff7b72return Te6edf3START_NOT_STICKY
Tb4b4b4}

Tff7b72return Tff7b72if Tb4b4b4(Tff7b72!Te6edf3wantForegroundTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3i Tb4b4b4{ Ta5d6ff"Ta5d6ffStopping mesh service because no device is selectedTa5d6ff" Tb4b4b4}
Te6edf3ServiceCompatTb4b4b4.Te6edf3stopForegroundTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3ServiceCompatTb4b4b4.Te6edf3STOP_FOREGROUND_REMOVETb4b4b4)
Te6edf3stopSelfTb4b4b4(Tb4b4b4)
Te6edf3START_NOT_STICKY
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3START_STICKY
Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffonTaskRemovedTb4b4b4(Te6edf3rootIntentTb4b4b4: Te6edf3Intent?Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onTaskRemovedTb4b4b4(Te6edf3rootIntentTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3i Tb4b4b4{ Ta5d6ff"Ta5d6ffMesh service: onTaskRemovedTa5d6ff" Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffonBindTb4b4b4(Te6edf3intentTb4b4b4: Te6edf3Intent?Tb4b4b4)Tb4b4b4: Te6edf3IBinder Tff7b72= Te6edf3binder

Tff7b72override Tff7b72fun Td2a8ffonDestroyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3i Tb4b4b4{ Ta5d6ff"Ta5d6ffDestroying mesh serviceTa5d6ff" Tb4b4b4}
Te6edf3ServiceCompatTb4b4b4.Te6edf3stopForegroundTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3ServiceCompatTb4b4b4.Te6edf3STOP_FOREGROUND_REMOVETb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3isServiceInitializedTb4b4b4) Tb4b4b4{
Te6edf3orchestratorTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3serviceJobTb4b4b4.Te6edf3cancelTb4b4b4(Tb4b4b4)
Tff7b72superTb4b4b4.Te6edf3onDestroyTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3binder Tff7b72=
Tff7b72object Tb4b4b4: T56d364IMeshServiceTb4b4b4.Te6edf3StubTb4b4b4(Tb4b4b4) Tb4b4b4{
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffOVERRIDE_DEPRECATIONTa5d6ff"Tb4b4b4)
Tff7b72override Tff7b72fun Td2a8ffsetDeviceAddressTb4b4b4(Te6edf3deviceAddrTb4b4b4: Tffa657String?Tb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3d Tb4b4b4{ Ta5d6ff"Ta5d6ffPassing through device change to radio service: Tffd700${Te6edf3deviceAddrTff7b72?.Te6edf3anonymizeTffd700}Ta5d6ff" Tb4b4b4}
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleUpdateLastAddressTb4b4b4(Te6edf3deviceAddrTb4b4b4)
Te6edf3radioInterfaceServiceTb4b4b4.Te6edf3setDeviceAddressTb4b4b4(Te6edf3deviceAddrTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsubscribeReceiverTb4b4b4(Te6edf3packageNameTb4b4b4: Tffa657StringTb4b4b4, Te6edf3receiverNameTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Te6edf3serviceBroadcastsTb4b4b4.Te6edf3subscribeReceiverTb4b4b4(Te6edf3receiverNameTb4b4b4, Te6edf3packageNameTb4b4b4)
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffOVERRIDE_DEPRECATIONTa5d6ff"Tb4b4b4)
Tff7b72override Tff7b72fun Td2a8ffgetUpdateStatusTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Int Tff7b72= Tff7b72-T79c0ff4

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffOVERRIDE_DEPRECATIONTa5d6ff"Tb4b4b4)
Tff7b72override Tff7b72fun Td2a8ffstartFirmwareUpdateTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// No-op: firmware update is handled by the in-app OTA system.
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetMyNodeInfoTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3MyNodeInfo? Tff7b72= Te6edf3nodeManagerTb4b4b4.Te6edf3getMyNodeInfoTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffgetMyIdTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3nodeManagerTb4b4b4.Te6edf3getMyIdTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffgetPacketIdTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Int Tff7b72= Te6edf3commandSenderTb4b4b4.Te6edf3generatePacketIdTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffsetOwnerTb4b4b4(Te6edf3uTb4b4b4: Te6edf3MeshUserTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetOwnerTb4b4b4(Te6edf3uTb4b4b4, Te6edf3myNodeNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetRemoteOwnerTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3payloadTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetRemoteOwnerTb4b4b4(Te6edf3idTb4b4b4, Te6edf3destNumTb4b4b4, Te6edf3payloadTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetRemoteOwnerTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleGetRemoteOwnerTb4b4b4(Te6edf3idTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsendTb4b4b4(Te6edf3pTb4b4b4: Te6edf3DataPacketTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{ Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSendTb4b4b4(Te6edf3pTb4b4b4, Te6edf3myNodeNumTb4b4b4) Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetConfigTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3ByteArray Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{ Te6edf3commandSenderTb4b4b4.Te6edf3getCachedLocalConfigTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3encodeTb4b4b4(Tb4b4b4) Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetConfigTb4b4b4(Te6edf3payloadTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetConfigTb4b4b4(Te6edf3payloadTb4b4b4, Te6edf3myNodeNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetRemoteConfigTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3numTb4b4b4: Tffa657IntTb4b4b4, Te6edf3payloadTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetRemoteConfigTb4b4b4(Te6edf3idTb4b4b4, Te6edf3numTb4b4b4, Te6edf3payloadTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetRemoteConfigTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3configTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleGetRemoteConfigTb4b4b4(Te6edf3idTb4b4b4, Te6edf3destNumTb4b4b4, Te6edf3configTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetModuleConfigTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3numTb4b4b4: Tffa657IntTb4b4b4, Te6edf3payloadTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetModuleConfigTb4b4b4(Te6edf3idTb4b4b4, Te6edf3numTb4b4b4, Te6edf3payloadTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetModuleConfigTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3configTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleGetModuleConfigTb4b4b4(Te6edf3idTb4b4b4, Te6edf3destNumTb4b4b4, Te6edf3configTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetRingtoneTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3ringtoneTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetRingtoneTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3ringtoneTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetRingtoneTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleGetRingtoneTb4b4b4(Te6edf3idTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetCannedMessagesTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3messagesTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetCannedMessagesTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3messagesTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetCannedMessagesTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleGetCannedMessagesTb4b4b4(Te6edf3idTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetChannelTb4b4b4(Te6edf3payloadTb4b4b4: Te6edf3ByteArray?Tb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetChannelTb4b4b4(Te6edf3payloadTb4b4b4, Te6edf3myNodeNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetRemoteChannelTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3numTb4b4b4: Tffa657IntTb4b4b4, Te6edf3payloadTb4b4b4: Te6edf3ByteArray?Tb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleSetRemoteChannelTb4b4b4(Te6edf3idTb4b4b4, Te6edf3numTb4b4b4, Te6edf3payloadTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetRemoteChannelTb4b4b4(Te6edf3idTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3indexTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleGetRemoteChannelTb4b4b4(Te6edf3idTb4b4b4, Te6edf3destNumTb4b4b4, Te6edf3indexTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffbeginEditSettingsTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleBeginEditSettingsTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffcommitEditSettingsTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleCommitEditSettingsTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetChannelSetTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3ByteArray Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3commandSenderTb4b4b4.Te6edf3getCachedChannelSetTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3encodeTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetNodesTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Te6edf3NodeInfoTff7b72> Tff7b72= Te6edf3nodeManagerTb4b4b4.Te6edf3getNodesTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffconnectionStateTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3serviceRepositoryTb4b4b4.Te6edf3connectionStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffstartProvideLocationTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3locationManagerTb4b4b4.Te6edf3startTb4b4b4(Te6edf3serviceScopeTb4b4b4) Tb4b4b4{ Te6edf3commandSenderTb4b4b4.Te6edf3sendPositionTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffstopProvideLocationTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3locationManagerTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffremoveByNodenumTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Tff7b72val Te6edf3myNodeNum Tff7b72= Te6edf3nodeManagerTb4b4b4.Te6edf3myNodeNumTb4b4b4.Te6edf3value
Tff7b72if Tb4b4b4(Te6edf3myNodeNum Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRemoveByNodenumTb4b4b4(Te6edf3nodeNumTb4b4b4, Te6edf3requestIdTb4b4b4, Te6edf3myNodeNumTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3nodeManagerTb4b4b4.Te6edf3removeByNodenumTb4b4b4(Te6edf3nodeNumTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestUserInfoTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3destNum Tff7b72!Tff7b72= Te6edf3myNodeNumTb4b4b4) Tb4b4b4{
Te6edf3commandSenderTb4b4b4.Te6edf3requestUserInfoTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestPositionTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3positionTb4b4b4: Te6edf3PositionTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestPositionTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3positionTb4b4b4, Te6edf3myNodeNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffsetFixedPositionTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3positionTb4b4b4: Te6edf3PositionTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3commandSenderTb4b4b4.Te6edf3setFixedPositionTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3positionTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestTracerouteTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3commandSenderTb4b4b4.Te6edf3requestTracerouteTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestNeighborInfoTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestNeighborInfoTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestShutdownTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestShutdownTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestRebootTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestRebootTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrebootToDfuTb4b4b4(Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRebootToDfuTb4b4b4(Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestFactoryResetTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestFactoryResetTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestNodedbResetTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3preserveFavoritesTb4b4b4: Tffa657BooleanTb4b4b4) Tff7b72=
Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestNodedbResetTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4, Te6edf3preserveFavoritesTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffgetDeviceConnectionStatusTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleGetDeviceConnectionStatusTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestTelemetryTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3typeTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestTelemetryTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4, Te6edf3typeTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffrequestRebootOtaTb4b4b4(Te6edf3requestIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3destNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3modeTb4b4b4: Tffa657IntTb4b4b4, Te6edf3hashTb4b4b4: Te6edf3ByteArray?Tb4b4b4) Tff7b72=
Te6edf3toRemoteExceptions Tb4b4b4{
Te6edf3routerTb4b4b4.Te6edf3actionHandlerTb4b4b4.Te6edf3handleRequestRebootOtaTb4b4b4(Te6edf3requestIdTb4b4b4, Te6edf3destNumTb4b4b4, Te6edf3modeTb4b4b4, Te6edf3hashTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.16s